home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
workbench
/
tools
/
czesc_4
/
showprefs
/
showprefs.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-03-15
|
7KB
|
204 lines
/************************************************************************
** **
** ShowPreferences **
** **
** This utility allows you to view the system-configuation file of any **
** workbench disk without booting from this disk. **
** ShowPrefs can be started from CLI or workbench. **
** **
** Author & date: Rainer Koppler, 24.2.1992 **
** Compiler: Lattice-C v5.02 **
** **
************************************************************************/
#include <exec/types.h>
#include <exec/memory.h>
#include <intuition/intuition.h>
#include <intuition/preferences.h>
#include <workbench/icon.h>
#include <workbench/startup.h>
#include <workbench/workbench.h>
#include <libraries/dosextens.h>
#define LIB_VERSION 33L /* at least Kickstart 1.2 */
#define MAX_LEN 80 /* length of work string */
#define PREF_SIZE sizeof(struct Preferences)
/*---------------------------------------------------------------------**
** external variables and global declarations **
**---------------------------------------------------------------------*/
extern struct IntuitionBase *IntuitionBase;
extern struct IconBase *IconBase;
extern struct WBStartup *WBenchMsg;
static char workStr[MAX_LEN];
static char devStr[MAX_LEN/2];
static const char sysConfName[] = "system-configuration";
static char toolName[] = "UNIT";
/*---------------------------------------------------------------------**
** function: GetToolType **
** returns the value of a specified tool type of a specified file. **
**---------------------------------------------------------------------*/
char *GetToolType (char *fileName, char *ttName, char *ttValue)
{
struct DiskObject *obj;
char *ttVal = NULL;
if(IconBase = (struct IconBase *)OpenLibrary("icon.library",LIB_VERSION)) {
if(obj = GetDiskObject(fileName)) {
if(ttVal = FindToolType(obj->do_ToolTypes,ttName)) {
strcpy(ttValue,ttVal);
ttVal = ttValue;
}
FreeDiskObject(obj);
}
CloseLibrary(IconBase);
}
else
printf("Cannot open icon.library.\n");
return(ttVal);
}
/*----------------------------------------------------------------------**
** function: GetPrefName **
** searches a file looking like "<unitName>[devs/]system-configuration" **
** and returns the name of the first found file. **
**----------------------------------------------------------------------*/
char *GetPrefName(char *unitName)
{
BOOL found = FALSE;
struct FileLock *tst;
/* attempt to access UNIT:system-configuration */
if(unitName != NULL) strcpy(workStr,unitName);
strcat(workStr,sysConfName);
if((tst = (struct FileLock *)Lock(workStr,ACCESS_READ)) != NULL)
found=TRUE;
UnLock(tst);
if(found) return(workStr);
/* attempt to access UNIT:devs/system-configuration */
workStr[0] = '\0';
if(unitName != NULL)
strcpy(workStr,unitName);
strcat(workStr,"devs/");
strcat(workStr,sysConfName);
if((tst = (struct FileLock *)Lock(workStr,ACCESS_READ)) != NULL)
found=TRUE;
UnLock(tst);
if(found) return(workStr);
/* no matching file found */
return(NULL);
}
/*----------------------------------------------------------------------**
** function: ShowPrefs **
** sets new preferences, opens a simple window and waits until the user **
** closes the window. **
**----------------------------------------------------------------------*/
struct NewWindow demoWindow = {
185,82, /* LeftEdge,TopEdge */
270,92, /* Width,Height */
0,1, /* DetailPen,BlockPen */
CLOSEWINDOW, /* IDCMPFlags */
WINDOWDRAG+WINDOWCLOSE+
WINDOWSIZING+WINDOWDEPTH,/* Window Flags */
NULL, /* Gadget */
NULL, /* Image */
"Close window to exit", /* Title */
NULL, /* Screen */
NULL, /* Bitmap */
248,20, /* MinWidth,MinHeight */
640,256, /* MaxWidth,MaxHeight */
WBENCHSCREEN /* Type */
};
void ShowPrefs(char *prefName)
{
struct Preferences *oldPrefs,*newPrefs,*setPrefs;
struct FileHandle *pFile;
struct Window *win;
struct IntuiMessage *imsg;
int class,code;
if(IntuitionBase=(struct IntuitionBase *) OpenLibrary("intuition.library",LIB_VERSION)) {
if(oldPrefs=(struct Preferences *)AllocMem(PREF_SIZE*3,MEMF_CLEAR|MEMF_FAST)) {
newPrefs = oldPrefs+PREF_SIZE;
setPrefs = newPrefs+PREF_SIZE;
if(pFile = (struct FileHandle *)Open(prefName,MODE_OLDFILE)) {
Read(pFile,(UBYTE *)newPrefs,PREF_SIZE);
Close(pFile);
GetPrefs(oldPrefs,PREF_SIZE);
CopyMem(oldPrefs,setPrefs,PREF_SIZE);
setPrefs->color17 = newPrefs->color17;
setPrefs->color18 = newPrefs->color18;
setPrefs->color19 = newPrefs->color19;
CopyMem(newPrefs->PointerMatrix,setPrefs->PointerMatrix,sizeof(USHORT)*36);
setPrefs->color0 = newPrefs->color0;
setPrefs->color1 = newPrefs->color1;
setPrefs->color2 = newPrefs->color2;
setPrefs->color3 = newPrefs->color3;
SetPrefs(setPrefs,PREF_SIZE,FALSE);
if(win = (struct Window *)OpenWindow(&demoWindow)) {
Wait(1L << win->UserPort->mp_SigBit);
while(imsg = (struct IntuiMessage *)GetMsg(win->UserPort)) {
class = imsg->Class;
code = imsg->Code;
ReplyMsg(imsg);
if(class == CLOSEWINDOW) break;
}
CloseWindow(win);
}
SetPrefs(oldPrefs,PREF_SIZE,FALSE);
}
FreeMem(oldPrefs,PREF_SIZE*3);
}
CloseLibrary(IntuitionBase);
}
}
/*--------------------------------------------------------------------*/
void main(int argc, char *argv[])
{
char *confName = NULL, *unitName = NULL;
if(argc == 0)
/* start from workbench */
unitName = GetToolType(WBenchMsg->sm_ArgList->wa_Name,toolName,devStr);
else {
/* start from CLI */
if(--argc > 1) {
printf("Too many parameters !\n");
exit(FALSE);
}
if(argc == 1) {
if(strcmp(argv[1],"?")==0) {
printf("\n»» ShowPrefs «« by Rainer Koppler\n\n");
printf("Usage: %s [<system-configuration file>]\n",argv[0]);
exit(FALSE);
}
else
confName = argv[1];
}
}
if(confName == NULL)
if((confName = GetPrefName(unitName))==NULL) {
printf("No system-configuration file found.\n");
exit(FALSE);
}
ShowPrefs(confName);
}